#include "queue.h"


//=======================================================================================================
//队列结构体变量
//=======================================================================================================
queue  key_queue;
queue  key_queue_uart;


//=======================================================================================================
//队列初始化
//=======================================================================================================
void queue_init(queue *p_queue)
{
	p_queue->tail=0;
	p_queue->head=0;
	p_queue->num=0;
}

//=======================================================================================================
//清理队列的函数
//=======================================================================================================
void queue_deinit(queue *p_queue)
{
	p_queue->tail=0;
	p_queue->head=0;
	p_queue->num=0;
}

//=======================================================================================================
//计算有效数字个数的函数
//=======================================================================================================
int queue_size(const queue *p_queue)
{
	return p_queue->num;
}

//=======================================================================================================
//判断队列是否为空的函数
//=======================================================================================================
int queue_empty(const queue *p_queue)
{
		return !(p_queue->num);
}

//=======================================================================================================
//判断队列是否为满的函数
//=======================================================================================================
int queue_full(const queue *p_queue)
{
		return p_queue->num>=SIZE;
}

//=======================================================================================================
//向缓存区输入数据
//=======================================================================================================
int queue_push(queue *p_queue,unsigned char data)
{

    unsigned char temp_buffer[SIZE];
    int len, temp;
	if(queue_full(p_queue))
	{
		return 0;
    }
	else
	{
        p_queue->arr[(p_queue->tail)%SIZE] = data;
        p_queue->num ++;
        p_queue->tail = (p_queue->tail + 1)%SIZE;
	  return 1;
	}
}

//=======================================================================================================
//取出一个数并删除；
//=======================================================================================================
unsigned char queue_pop(queue *p_queue )
{
    unsigned char num;
	if(queue_empty(p_queue))
		return 0;
	else
	{
		num = p_queue->arr[p_queue->head];
		p_queue->head++;
	    p_queue->head%= SIZE;
		p_queue->num--;
	  return num;
	}
}

//=======================================================================================================
//取出一个数(读取最前面的一个字节)
//=======================================================================================================
unsigned char queue_from(const queue *p_queue)
{
    int num;
	if(queue_empty(p_queue))
		return 0;
	else
	    num = p_queue->arr[p_queue->head];
	 return num;
}

